[IA64] Guarantee VTi guest can get correct frequency base
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Wed, 8 Mar 2006 00:08:20 +0000 (17:08 -0700)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Wed, 8 Mar 2006 00:08:20 +0000 (17:08 -0700)
Because some platforms don't implement pal_freq_base call in PAL,
in this case, call host SAL sal_freq_base instead to get correct
freqency base value.

Signed-off-by: Zhang Xiantao <xiantao.zhang@intel.com>
Signed-off-by: Yu Ke <ke.yu@intel.com>
xen/arch/ia64/vmx/pal_emul.c

index 3c9737cba3c28fd7a3a723db207e6ba6519e77cd..e132786b908bb1fd5382706e8306f89941e0bcfd 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <asm/vmx_vcpu.h>
 #include <asm/pal.h>
+#include <asm/sal.h>
 
 static void
 get_pal_parameters (VCPU *vcpu, UINT64 *gr29,
@@ -182,8 +183,16 @@ pal_fixed_addr(VCPU *vcpu){
 static struct ia64_pal_retval
 pal_freq_base(VCPU *vcpu){
     struct ia64_pal_retval result;
+    struct ia64_sal_retval isrv;
 
     PAL_CALL(result,PAL_FREQ_BASE, 0, 0, 0);
+    if(result.v0 == 0){ //PAL_FREQ_BASE may not be implemented in some platforms, call SAL instead.
+        SAL_CALL(isrv, SAL_FREQ_BASE, 
+                SAL_FREQ_BASE_PLATFORM, 0, 0, 0, 0, 0, 0);
+        result.status = isrv.status;
+        result.v0 = isrv.v0;
+        result.v1 = result.v2 =0;
+    }
     return result;
 }